package practice6;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class P2606 {

    static int N;
    static List<Integer>[] lists;		//相当于临接表,存储每个节点的儿子

    public static int dfs(int k) {
        int size=lists[k].size();
        if(size!=0) {
            //求以儿子节点为根节点的子树的最大深度maxHeight
            int maxHeight=0;
            for(int i=0;i<size;i++) {
                maxHeight=Math.max(maxHeight, dfs(lists[k].get(i)));
            }
            //根据左孩子右兄弟可知,无论儿子有多复杂,它的兄弟都是依次连接在它的右边,不算最后一个子树深度必为size
            //即深度取决于儿子数量(size)以及最大的子树深度(maxHeight)
            return size+maxHeight;
        }else {
            //找到叶子节点返回0,上一层算到size里面了
            return 0;
        }
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        N=sc.nextInt();
        lists=new ArrayList[N+1];
        for(int i=1;i<=N;i++) {
            lists[i]=new ArrayList();
        }
        for(int i=2;i<=N;i++) {
            int p=sc.nextInt();
            lists[p].add(i);
        }
        int ans=dfs(1);				//深搜求树的最大高度
        System.out.println(ans);
    }
}
